/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package starfox;

import java.awt.Color;
import util.Botao;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.Sound;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
import org.newdawn.slick.state.transition.FadeInTransition;
import org.newdawn.slick.state.transition.FadeOutTransition;
import util.JanelaRecordes;
import util.StopWatch;

/**
 *
 * @author Lucas
 */
public class GameOverStateLose extends BasicGameState {
    //Número do estado
    int stateID = 5;

    //Pontuação obtida no jogo
    static int pontos;

    //Imagens
    Image background = null;
    Image perdeu = null;
    Botao voltar = null;

    //Atributos para pegar a posição do mouse, botões do teclado etc
    Input input = null;
    int mouseX;
    int mouseY;

    //Variável para indicar se o mouse está sobre o botão de voltar
    boolean sobreVoltar = false;
    
    //Fonte para mostrar os resultados
    UnicodeFont fonte;
    //Textos dos resultados
    String textoPerdeu;
    String textoPontuacao;
    //Ver se é necessário atualizar o texto ou não
    boolean textoDesatualizado;
    
    //Janela para pegar o nome do jogador caso tenha feito um recorde
    JanelaRecordes j = null;
    //Verificar se a janela já foi criada (pois a criação dela fica dentro de um loop)
    boolean criouJanela = false;
    //Nome do jogador que conseguiu um recorde
    String nomeRecordes = null;
    
    //Easter Egg :P
    Sound oitomil = null;
    boolean tocou = false;

    GameOverStateLose(int stateID){
        this.stateID = stateID;
    }

    @Override
    public int getID() {
        return stateID;
    }
    
    public static void setPontuacao(int pontuacao){
        pontos = pontuacao;
    }

    //Carregar as imagens, fontes, textos e o som
    @Override
    public void init(GameContainer arg0, StateBasedGame arg1) throws SlickException {
        background = new Image("imagens/Espaço.jpg");
        voltar = new Botao(645, 547, "imagens/voltar.png");
        perdeu = (new Image("imagens/Game Over.png")).getSubImage(0, 0, 554, 38);
        
        textoPerdeu = "Você perdeu o jogo";
        
        fonte =  new UnicodeFont("STENCIL.TTF", 38, true, true);
        fonte.addAsciiGlyphs();
        fonte.getEffects().add(new ColorEffect(new Color(230, 4, 4)));
        fonte.loadGlyphs();
        
        textoDesatualizado = true;
        
        oitomil = new Sound("music/8000.ogg");
    }

    //Renderizar as imagens e textos
    @Override
    public void render(GameContainer arg0, StateBasedGame arg1, Graphics arg2) throws SlickException {
        background.draw();
        voltar.draw();
        fonte.drawString(400-fonte.getWidth(textoPerdeu)/2, 300-fonte.getHeight(textoPerdeu) - 20, textoPerdeu);
        fonte.drawString(400-fonte.getWidth(textoPontuacao)/2, 320, textoPontuacao);
    }

    //Atualizar o estado
    @Override
    public void update(GameContainer gc, StateBasedGame sb, int delta) throws SlickException {
        //Pegar posição do mouse
        input = gc.getInput();
        mouseX = input.getMouseX();
        mouseY = input.getMouseY();

        sobreVoltar = false;
        
        //Se o som ainda não foi tocado e a pontuação é de mais de 8000
        if(!tocou && pontos > 8000){
            oitomil.play();
            tocou = true;
        }
        
        //Verificar se o texto deve ser atualizado (mudança na pontuação)
        if(textoDesatualizado){
            textoPontuacao = "Sua pontuação: " + pontos;
            textoDesatualizado = false;
        }
        
        /* Se a janela de novo recorde não foi criada e o
         * jogador conseguiu um novo recorde, criar uma.*/
        if(!criouJanela && pontos > RecordesState.recordes[9].getPontos()){
            criouJanela = true;
            j = new JanelaRecordes(pontos);
        }

        //Verificar se o mouse está sobre o botão de voltar
        if( ( mouseX >= voltar.getX() && mouseX <= voltar.getX() + voltar.getImageWidth()) &&
            ( mouseY >= voltar.getY() && mouseY <= voltar.getY() + voltar.getImageHeight()) )
        {
            sobreVoltar = true;
        }

        if(sobreVoltar)
        {
            //Aumentar o tamanho do botão
            if(voltar.getScale() < 1.05f)
                voltar.changeScale(Botao.scaleStep*delta);

            //Se o jogador clicou no botão, volta ao menu principal
            if(input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)){
                textoDesatualizado = true;
                criouJanela = false;
                pontos = 0;
                tocou = false;
                sb.enterState(StarFox.MAINMENUSTATE, new FadeOutTransition(), new FadeInTransition());
                voltar.setScale(1);
            }
        }else{
            //Se o mouse não está sobre o botão, diminuir até o tamanho normal
            if(voltar.getScale() > 1.0f)
                voltar.changeScale(-Botao.scaleStep*delta);
        }
    }
}